package com.example.userservice.service.impl;

import com.example.userservice.dao.UserDAO;
import com.example.userservice.entity.User;
import com.example.userservice.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;

import java.util.List;

/**
 * 用户服务实现类（实现业务逻辑）
 * 用@Service注解，告诉Spring这是一个服务组件
 */
@Service
public class UserServiceImpl implements UserService {

    /**
     * 注入UserDAO（Spring自动创建UserDAO的实现类）
     */
    @Autowired
    private UserDAO userDAO;

    @Override
    public User getById(Long id) {
        // 校验ID非空
        Assert.notNull(id, "用户ID不能为空");
        return userDAO.selectById(id);
    }

    @Override
    public List<User> listAll() {
        return userDAO.selectAll();
    }

    @Override
    public List<User> listByNameLike(String name) {
        // 校验用户名非空
        Assert.hasText(name, "用户名不能为空");
        return userDAO.selectByNameLike(name);
    }

    @Override
    public User save(User user) {
        // 业务校验：用户名不能为空
        Assert.hasText(user.getName(), "用户名不能为空");
        // 调用DAO插入数据
        userDAO.insert(user);
        // 插入成功后，user的id会被MyBatis自动填充（因为insert语句用了useGeneratedKeys="true"）
        return user;
    }

    @Override
    public User update(User user) {
        // 校验ID非空
        Assert.notNull(user.getId(), "用户ID不能为空");
        // 校验用户是否存在
        User existingUser = userDAO.selectById(user.getId());
        Assert.notNull(existingUser, "用户不存在");
        // 调用DAO更新数据
        userDAO.update(user);
        // 返回更新后的用户（重新查一次数据库，确保数据最新）
        return userDAO.selectById(user.getId());
    }

    @Override
    public void remove(Long id) {
        // 校验ID非空
        Assert.notNull(id, "用户ID不能为空");
        // 校验用户是否存在
        User existingUser = userDAO.selectById(id);
        Assert.notNull(existingUser, "用户不存在");
        // 调用DAO删除数据
        userDAO.deleteById(id);
    }
} 